const deepClone = (obj) => {
  const objClone = Array.isArray(obj) ? [] : {};
  if (obj && typeof obj === "object") {
    for (const key in obj) {
      if (obj[key] && typeof obj[key] === "object") {
        objClone[key] = deepClone(obj[key]);
      } else {
        objClone[key] = obj[key];
      }
    }
  }
  return objClone;
};

/**
 * @desc 通过子id获取父级（树结构向上查找一直到根节点）
 * @param {Array} tree 树形结构数据
 * @param {String} id 子级id
 * @param {String} key 筛选关键字
 * @returns 数组 [父节点, 父节点的父节点...] 如果查不到返回undefined
 */
const getParentsById = (tree, id, key) => {
  for (const i in tree) {
    if (tree[i][key] === id) {
      return [tree[i]];
    }
    if (tree[i].children) {
      const node = getParentsById(tree[i].children, id, key);
      if (node !== undefined) {
        const rsNode = node.concat(tree[i]);

        return rsNode;
      }
    }
  }
};

/**
 *  Ae型-A型里面带回环端口的设备，后端返回的afsType仍然是A，前端在展示时，需要根据设备型号判断显示成Ae型
 *  Ce型-后端返回的afsType=D，前端在展示时，需要根据设备型号判断显示成Ce型，并且传递给后端是仍是afsType=D
 **/

 const handleAfsType = (device, type = 'AFS_TYPE') => {
  if (type === 'AFS_TYPE') {
    // 需要转换：Ae->D Ce->D
    if (!device.afsType) return ''
    return device.afsType
      .replace(/Ae/g, 'D')
      .replace(/Ce/g, 'D')
  } else if (type === 'MODEL') {
    // 需要根据型号，然后显示AFS_TYPE=Ae/Ce
    // model=VR-AFS96 AD1EGS(OPBe012)是Ae型
    // model=VR-AFS144 CD1EGS(OPBe004)是Ce型
    if (!device.model) return device.afsType
    // 验证是否是Ae型设备
    const regAe = /AD1|AD2|AA1|AA2/g
    // 验证是否是Ce型设备
    const regCe = /CD1|CD2|CA1|CA2/g
    if (
      regAe.test(device.model) &&
      device.model.includes('e0')
    ) {
      return 'Ae'
    } else if (
      regCe.test(device.model) &&
      device.model.includes('e0')
    ) {
      return 'Ce'
    } else {
      return device.afsType
    }
  }
}

export {
  deepClone,
  getParentsById,
  handleAfsType
}
